package main

import "fmt"

//定义接口
type jisuan interface { //子集
	Rist01() int
}

//子集不包括超集
//不能将子集赋值给超集
//接口继承
type jicheng interface { //超集
	jisuan //匿名字段
	sing(string)
}

//父类
type Operfu01 struct {
	id01 int
	id02 int
}

//加法子类
type jiafazilei01 struct {
	Operfu01
}

//继承实现
func (a *jiafazilei01) sing(name string) {
	fmt.Println("唱歌", name)
}

//加法子类方法
func (a *jiafazilei01) Rist01() int {
	return a.id01 + a.id02

}

//多态的实现
//将接口作为函数参数，实现多态
func duotai(a jisuan) {
	av := a.Rist01()
	fmt.Println(av)

}
func main() {
	var a jisuan //子集
	x := jiafazilei01{Operfu01{10, 20}}
	a = &x
	vor := a.Rist01()
	fmt.Println(vor)
	//多态的实现
	duotai(&x)
	//接口继承实现
	var p jicheng // 超集
	p = &x
	p.Rist01()
	p.sing("十八摸")
	//将一个接口，赋值给另一个接口
	//超集包含子集所有方法
	a = p

}
